//
// Created by binny on 2019/9/20.
//
#include <stdio.h>
#include <stdlib.h>

/**
 * 一级指针
 * @param sr 原始字符串
 * @param ch 待查找字符串
 * @param c
 * @return
 */
int findCharByP(const char *sr, char ch, char *ret) {
    while (*sr) {
        if (*sr == ch) {
            *ret = *sr;
            return 1;
        }
        sr++;
    }
    return 0;
}

/**
 * 一级指针
 * @param sr
 * @param ch
 * @param ret
 * @return
 */
int find2(const char *sr, char ch, char *ret) {
    char *index = (char *) sr;
    while (*index) {
        if (*index == ch) {
            *ret = *index;//这个地方导致不行
            return 1;
        }
        index++;//地址自动递增
    }
    return 0;
}


//int main() {
//    printf("利用二级指针去查找 \n");
//    char str[] = "hello china";
//    int (*find)(const char *, char, char *) = find2;
//    char c;
//    if (find(str, 'a', &c)) {
//        printf("找到了 %c \n", c);
//    } else {
//        printf("没找到 \n");
//    }
//    return 0;
//}
//int main() {
//    printf("利用二级指针去查找 \n");
//    char str[] = "hello china";
//    int (*find)(const char *, char, char *) = findCharByP;
//    char c;
//    if (find(str, 'a', &c)) {
//        printf("找到了 %c \n", c);
//    } else {
//        printf("没找到 \n");
//    }
//    return 0;
//}

/**
 * 利用二级指针
 *
 * @param src 指向源字符串
 * @param ch 要查找的字符串
 * @param dist 保存查到的字符串的首地址的指针
 * @return 是否查找成功
 */
int findCharByPP(const char *src, char ch, const char **dist) {
    while (*src) {
        if (*src == ch) {
//            **dist = src;
            *dist = src;
            return 1;
        }
        src++;
    }
    return 0;
}

//int main() {
//    printf("利用二级指针去查找 \n");
//    char str[] = "hello china";
////    int size = sizeof(str) / sizeof(char);
////    for (int i = 0; i < size; ++i) {
////        printf("str[%d]=%c =%p\n", i, str[i], &str[i]);
////    }
//    const char **pString = (const char **) (char **) malloc(1);
////    char *pString;
//    int (*find)(const char *, char, const char **) = findCharByPP;
//
//    if (find(str, 'a', (const char **) pString)) {
//        printf("找到了 %c \n", **pString);
//    } else {
//        printf("没找到 \n");
//    }
//    free(pString);
//    return 0;
//}

void swap(int a, int b) {
    int temp;
    temp = a;
    a = b;
    b = temp;
}

void swap1(int *a, int *b) {
    int *temp;
    temp = a;
    a = b;
    b = temp;
}

void swap2(char *c) {
    *c = '2';
}

//int main() {
////    int a = 3, b = 5;
////    swap1(&a, &b);
////    swap(a, b);
//    char c = "4";
//    char b = '7';
//    char a = '6';

//    swap2(&c);
//
//    printf("a = %c,b= %c,c= %c", a, b,c);
//    return 0;
//}


//void swap3(int *a, int *b) {
//    int c = 3;
//    int *temp = &c;
//    printf("temp = %p\n",temp);
//    printf("temp = %d\n",*temp);
//    printf("a = %d\n",*a);
//    printf("b = %d\n",*b);
//    *temp = *a;
//    *a = *b;
//    *b = *temp;
//    printf("temp = %d\n",*temp);
//    printf("a = %d\n",*a);
//    printf("b = %d\n",*b);
//}
//
//int main() {
//    int a = 2, b = 5;
//
//    swap3(&a, &b);
//
//    printf("a = %d,b= %d", a, b);
//    return 0;
//}

void test(int array[]) {
    array[0] = 19;
    printf("数组大小 = %lu", sizeof(array));
}
int main() {
    int a[10]={1,2,3};
    test(a);
    return 0;
}
//int add(int a, int b) {
//    return a + b;
//}
//
//int mul(int a, int b) {
//    return a * b;
//}
//
//int minus(int a, int b) {
//    return a - b;
//}
//
//int dev(int a, int b) {
//    return a - b;
//}
//
//int test2(int a, int b, int(*callback)(int, int)) {
//    return callback(a, b);
//}
//
//int main() {
//    int a = 100, b = 20;
//    printf("%d + %d = %d\n",a,b,test2(a,b,add));
//    printf("%d - %d = %d\n",a,b,test2(a,b,minus));
//    printf("%d * %d = %d\n",a,b,test2(a,b,mul));
//    printf("%d / %d = %d\n",a,b,test2(a,b,dev));
//    return 0;
//}